package br.com.advance.automacao.services.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;

import br.com.advance.automacao.enumeration.TipoErro;
import br.com.advance.automacao.model.CLP;
import br.com.advance.automacao.model.Erro;
import br.com.advance.automacao.model.Evento;
import br.com.advance.automacao.model.MTBF;
import br.com.advance.automacao.model.Turno;
import br.com.advance.automacao.services.EthernetIp4JService;
import br.com.advance.automacao.services.RegistroErroSistemaService;
import br.com.advance.automacao.services.dto.EficienciaCLP;

public class EthernetIp4JMockServiceImpl implements EthernetIp4JService {

	@Autowired
	private RegistroErroSistemaService registroErroSistemaService;

	@Override
	public EficienciaCLP obterEficienciaCLP(CLP clp) {
		Random random = new Random();
		EficienciaCLP eficiencia = new EficienciaCLP(clp.getNome(), random.nextInt(100), random.nextInt(100), random.nextInt(3000), random.nextInt(3000));
		return eficiencia;
	}

	@Override
	public Object[] buscarEventosFimTurno(CLP clp, Date data, Turno turno) {
		Random random = new Random();
		Object[] retorno = new Object[2];
		List<Evento> eventos = new ArrayList<Evento>();
		for(Erro erro : clp.getErros()) {
			while(random.nextInt(2) % 2 == 0) {
				if(random.nextInt(10) == 5) {
					registroErroSistemaService.criar(TipoErro.ERROS_EQUIPAMENTOS, "Código desconhecido encontrado: " + 5 + " | CLP id: " + clp.getId());
				} else {
					criarEvento(clp, data, turno, random, eventos, erro);
				}
			}
		}
		retorno[0] = eventos;
		retorno[1] = criarMTBF(clp, data, turno, random);
		return retorno;
	}

	private void criarEvento(CLP clp, Date data, Turno turno, Random random,
			List<Evento> eventos, Erro erro) {
		Evento evento = new Evento();
		evento.setClp(clp);
		evento.setData(data);
		evento.setHora(data);
		evento.setDataHora(data);
		evento.setErro(erro);
		evento.setTempo(random.nextInt(49+1));
		evento.setTurno(turno);
		eventos.add(evento);
	}

	private MTBF criarMTBF(CLP clp, Date data, Turno turno, Random random) {
		MTBF mtbf = new MTBF();
		mtbf.setClp(clp);
		mtbf.setData(data);
		mtbf.setHora(data);
		mtbf.setDataHora(data);
		mtbf.setTurno(turno);
		Integer mtbfValor = random.nextInt(10000);
		mtbf.setValor(new BigDecimal(mtbfValor.toString()).divide(new BigDecimal("100")).doubleValue());
		return mtbf;
	}
}
